package com.xxl.job.executor.service.jobhandler;

import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.godtree.model.RankCrawlerCollection;
import com.godtree.service.IRankCrawlerCollectionService;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * @author lisicheng
 * @date 20220723
 */
@Component
@Slf4j
@RequiredArgsConstructor
public class RankJob {

  private final IRankCrawlerCollectionService rankCrawlerCollectionService;

  /**
   * 处理排名数据，通过tb_rank_crawler_collection表中的数据进行处理
   * <p></p>
   * 使用Mysql表处理的缺点是：排名列有限，因为表字段有限，无法处理更多的排名列（目前最多是90个排名）
   */
  @XxlJob("rankJob")
  public void rankJob() {

    // 使用表中的rank_id进行分组，然后对每个rank_id进行处理
    List<String> rankIdList = rankCrawlerCollectionService.listObjs(
        Wrappers.<RankCrawlerCollection>lambdaQuery().select(RankCrawlerCollection::getRankId)
            .groupBy(RankCrawlerCollection::getRankId), Convert::toStr);

    // 打印日志
    XxlJobHelper.log("本次任务共获取到{}个排名id。{}", rankIdList.size(),
        String.join("\n", rankIdList));

    // 通过rank_id处理每个排名
    for (String rankId : rankIdList) {
      rankCrawlerCollectionService.rankDataByMysql(rankId);
    }

  }


}
